package utils

import (
	"encoding/json"
	"io/ioutil"
	"log"
	"zinxp/ziface"
)

/*
	存储一切有关Zinx框架的全局参数，供其他模块使用
	一些参数也可以通过 用户根据 zinx.json来配置
*/

type GlobalObj struct {
	//当前zinx的全局server对象
	TcpServer ziface.IServer
	//当前服务器主机IP
	Host          string
	TcpPort       int
	Name          string
	Version       string
	MaxPacketSize uint32
	//当前服务器主机允许的最大链接个数
	MaxConn          int
	//worker 池的数量
	WorkerPoolSize   uint32
	//worker对应负责的任务队列最大任务储存数量
	MaxWorkerTaskLen uint32

	ConfigFilePath string
}

var GlobalObject *GlobalObj

//读取用户的配置文件
func (g *GlobalObj) Reload() {
	data, err := ioutil.ReadFile("conf/zinx.json")
	if err != nil {
		log.Panic(err)
	}
	err = json.Unmarshal(data, &GlobalObject)
	if err != nil {
		log.Panic(err)
	}
}

//默认加载
func init() {
	//初始化GlobalObject变量，设置一些默认值
	GlobalObject = &GlobalObj{
		Host:          "0.0.0.0",
		TcpPort:       7878,
		Name:          "ZinxServer",
		Version:       "0.4",
		MaxPacketSize: 4096,
		MaxConn:       12000,
		ConfigFilePath: "conf/zinx.json",
		WorkerPoolSize: 10,
		MaxWorkerTaskLen: 1024,
	}
	//从配置文件加载一些用户配置的参数
	GlobalObject.Reload()
}
